﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SchoolManagementSystem.Controls;
using CoreData;
using DevExpress.XtraBars;
using SchoolManagementSystem.Forms.BusinessForm;
using Helper;
using System.Threading;
namespace SchoolManagementSystem.Details
{
    //ngành học
    public partial class TempStudentDepositUC : DetailUC
    {
        public TempStudentDepositUC()
        {
            InitializeComponent();
            this.ObjectName = "Đặt cọc";
            this.Code = "Deposit";
            this.Type =new VwTempStudentDepositInfo();
            HiddenToolBar();       
        }

        private void HiddenToolBar()
        {
            
            commandBarUC1.cmdnew.Visibility = BarItemVisibility.Never;
            commandBarUC1.cmdcopy.Visibility = BarItemVisibility.Never;
            if(Master!=null)
            Master.barButtonItem_new.Visibility = BarItemVisibility.Never;
        }

        long TempStudentID;
        protected override long DetailDisplay()
        {
            HiddenToolBar();
            TempStudentDeposit data = new TempStudentDeposit();
            if (ID > 0)
            {
                data = (TempStudentDeposit)RegisterService.RegisterServices.TempStudentDepositService.GetByID(ID);
                buttonEdit_Branch.EditValue =
                    ((Branch)RegisterService.RegisterServices.BranchService.GetByID(data.BranchID)).Name;
                buttonEdit_Branch.Tag = data.BranchID;
                TempStudentID = data.TempStudentID;
            }
            dateEdit_DespositDate.DateTime = data.DepositDate;
            textEdit_Money.EditValue = data.Money;
            memoEdit_note.Text = data.Note;
            if (data.SelectMonth != 0)
                comboBoxEdit_SelectMonth.SelectedItem = data.SelectMonth.ToString();
            else
                comboBoxEdit_SelectMonth.SelectedIndex = -1;
            if (data.SelectYear != 0)
                comboBoxEdit_SelectYear.SelectedItem = data.SelectYear.ToString();
            else
                comboBoxEdit_SelectYear.SelectedIndex = -1;
            return ID;

        }

        protected override long Save()
        {
            TempStudentDeposit data = new TempStudentDeposit();
            if (ID > 0)
            {
                data = (TempStudentDeposit)RegisterService.RegisterServices.TempStudentDepositService.GetByID(ID);
            }
            data.DepositDate = dateEdit_DespositDate.DateTime;
            data.Money = (long)textEdit_Money.EditValue;
            data.Note = memoEdit_note.Text;
            if (comboBoxEdit_SelectMonth.SelectedItem != null)
                data.SelectMonth = int.Parse(comboBoxEdit_SelectMonth.SelectedItem.ToString());
            if (comboBoxEdit_SelectYear.SelectedItem != null)
                data.SelectYear = int.Parse(comboBoxEdit_SelectYear.SelectedItem.ToString());
            ID = RegisterService.RegisterServices.TempStudentDepositService.Save(data, ref ErrorMess);
            return ID;
        }


        public override bool Delete(long SelectedID)
        {
            try
            {

                RegisterService.RegisterServices.TempStudentDepositService.Delete(RegisterService.RegisterServices.TempStudentDepositService.GetByID(SelectedID));
                
            }
            catch
            {
                //ex
            }
            
            return true;
        }

        void RegisterClass()
        {
            this.Invoke((MethodInvoker)delegate
            {
                try
                {
                    if (ID < 0)
                    {
                        MessageControl.ShowMessage("Vui lòng chọn ngành đăng ký học từ bảng dữ liệu phía trên", "Error", MessageControl.Icon.Error);
                        return;
                    }
                    Student st = new Student();
                    frmSelectClass selectclass = new frmSelectClass();
                    if (selectclass.ShowDialog() == DialogResult.OK)
                    {
                        st.ClassID = selectclass.ID;
                    }
                    if (st.ClassID == 0)
                    {
                        MessageControl.ShowMessage("Chưa chọn lớp", "Error", MessageControl.Icon.Error);
                        return;
                    }
                    splashScreenManager1.ShowWaitForm();
                    st.Active = false;
                    var TempST = RegisterService.RegisterServices.TempStudentService.GetByID(this.TempStudentID) as TempStudent;
                    st.Active = false;
                    st.Address = TempST.Address;
                    st.Bonus = 0;
                    st.Code = RegisterService.RegisterServices.StudentService.GenerateCode(st.ClassID);
                    st.Name = TempST.FirstName + " " + TempST.LastName;
                    st.LastName = TempST.LastName;
                    st.FirstName = TempST.FirstName;
                    st.Note = TempST.Note;
                    st.Email = TempST.Email;
                    st.Phone = TempST.Phone;
                    st.Province = TempST.Province;
                    st.DateOfBirth = TempST.DayOfBirth;
                    st.PlaceOfBirth = TempST.PlaceOfBirth;
                    st.ChannelInfoID = TempST.ChannelInfoID;
                    var classInfo = (Class)RegisterService.RegisterServices.ClassService.GetByID(st.ClassID);
                    st.TotalFee = classInfo.Price;
                    st.DateOfAdmission = classInfo.StartDate;
                    st.RegisterDate = DateTime.Now;
                    st.Sex = TempST.Sex;
                    st.TempStudentID = TempST.ID;
                    st.RegisterDate = dateEdit_DespositDate.DateTime;
                    st.TypeOfFee = 1;
                    st.Status = 3;//set defult is "Signed up";
                    string mess = "";
                    var id = RegisterService.RegisterServices.StudentService.Save(st, ref mess);
                    if (id > 0)
                    {
                        TempST.IsRegister = true;
                        TempST.Status = 5;
                        mess = string.Empty;
                        var st_id = RegisterService.RegisterServices.TempStudentService.Save(TempST, ref mess);

                        //kiem tra xem trong bang kết quả đã có chưa nếu có rồi thì không thêm
                        var checkExist = RegisterService.RegisterServices.StudentResultService.GetByStudentID(id);
                        if (checkExist == null)
                        {
                            var subjectpointcolumn = RegisterService.RegisterServices.SubjectPointColumnService.GetSubjectPointColumnByClassID(st.ClassID);
                            if (subjectpointcolumn != null)
                            {
                                for (int i = 0; i < subjectpointcolumn.Count; i++)
                                {
                                    Student_Result st_r = new Student_Result();
                                    st_r.StudentID = id;
                                    st_r.Subject_PointColumnID = subjectpointcolumn[i].ID;
                                    st_r.Value = 0;
                                    RegisterService.RegisterServices.StudentResultService.Save(st_r);
                                }
                            }

                        }

                        #region thu dat coc
                        var checkVoucherFee = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetOneByLINQ(c => c.BranchID == (long)buttonEdit_Branch.Tag && c.TempStudentID == TempStudentID);
                        if (checkVoucherFee == null)
                        {
                            Voucher data = new Voucher();

                            data.CreateDate = DateTime.Now;

                            data.BillNo = string.Empty;

                            data.Description = "Học viên " + TempST.Name + " - lớp " + selectclass.Name + " đặt cọc: " + textEdit_Money.Text + " - ngày " + data.CreateDate.ToShortDateString();
                            data.ModifieBy = ValueDefine.StaffID;
                            data.PaymentMethod = 1;// comboboxUC_PaymentMethod.ID;
                            data.ReceiptReason = 1; //default =1
                            data.MoneyType = 0;
                            data.ModifieDate = DateTime.Now;
                            data.Excuter = 2;
                            data.CreateBy = ValueDefine.StaffID;
                            mess = "";
                            data.ReceiptNo = RegisterService.RegisterServices.VoucherService.GenerateReceiptNo(data.CreateDate);
                            //tạm thời không auto tạo phiếu
                            //long voucherid = RegisterService.RegisterServices.VoucherService.Save(data, ref mess);

                            //if (voucherid > 0)
                            //{
                            //    //mặt định đặt cọc là đặt cọc cho học phí lần 1.
                            //    var fee_voucher = new Receipt_VoucherFee();
                            //    var studentfeetime = RegisterService.RegisterServices.StudentFeeTimeService.GetStudentFeeTimeByStudentIDAndType(id, 1);//Lấy lần đóng học phí theo ID học viên và loại đóng
                            //    Receipt_FeeTimeObject item = new Receipt_FeeTimeObject();
                            //    item.starttime = studentfeetime.StartDate1;
                            //    item.endtime = studentfeetime.EndDate1;
                            //    item.Name = "Lần 1";
                            //    fee_voucher.TimeFee = item.ToString();
                            //    fee_voucher.StudentID = id;
                            //    fee_voucher.VoucherID = voucherid;
                            //    fee_voucher.Type = 0;
                            //    fee_voucher.Money = int.Parse(textEdit_Money.EditValue.ToString());
                            //    var fee_voucherId = RegisterService.RegisterServices.ReceiptVoucherFeeService.Save(fee_voucher);
                            //    if (fee_voucherId > 0)
                            //    {
                            //        MessageControl.ShowMessage("Do kế toán chưa tạo phiếu thu đặt cọc cho học viên này." + Environment.NewLine + "Nên chương trình tự động tạo phiếu thu đặt cọc với mã phiếu (" + data.ReceiptNo + ")." + Environment.NewLine + "Vui lòng thông báo cho kế toán nhập số tiền đặt cọc cho mã phiếu này", "Thông tin", MessageControl.Icon.Info);
                            //    }
                            //    else
                            //    {
                            //        RegisterService.RegisterServices.VoucherService.Delete(RegisterService.RegisterServices.VoucherService.GetByID(voucherid));
                            //        MessageControl.ShowMessage("Vui lòng thông báo cho kế toán tạo phiếu đặt cọc", "Thông tin", MessageControl.Icon.Info);

                            //    }
                            //}
                        }
                         else //nếu có rồi thi tiên hành cập nhật lại thông tin
                        {
                            checkVoucherFee.TempStudentID = 0;
                            checkVoucherFee.BranchID = 0;
                            checkVoucherFee.StudentID = id;
                            checkVoucherFee.Type = 0;
                            var studentfeetime = RegisterService.RegisterServices.StudentFeeTimeService.GetStudentFeeTimeByStudentIDAndType(id, 1);//Lấy lần đóng học phí theo ID học viên và loại đóng
                            Receipt_FeeTimeObject item = new Receipt_FeeTimeObject();
                            item.starttime = studentfeetime.StartDate1;
                            item.endtime = studentfeetime.EndDate1;
                            item.Name = "Lần 1";
                            checkVoucherFee.TimeFee = item.ToString();
                            RegisterService.RegisterServices.ReceiptVoucherFeeService.Save(checkVoucherFee);
                            //cap nhat lai hoc phi da dong
                            var studentFee = RegisterService.RegisterServices.Student_FeeService.GetByStudentID(id);
                            studentFee.Money = checkVoucherFee.Money;
                            studentFee.Status = 1;
                            RegisterService.RegisterServices.Student_FeeService.Save(studentFee);

                        }
                        #endregion

                        //luu lai lich su mới
                        Student_History historynew = new Student_History();
                        historynew.StudentID = id;
                        historynew.Content = "Đã đăng ký học lớp " + ((Class)RegisterService.RegisterServices.ClassService.GetByID(st.ClassID)).Name;
                        historynew.Content += " vào ngày " + DateTime.Now.ToShortDateString();
                        RegisterService.RegisterServices.StudentHistoryService.Save(historynew);
                        Thread.Sleep(2000);
                        splashScreenManager1.CloseWaitForm();
                        MessageControl.ShowMessage("Đã đăng ký học thành công, vui lòng trở lại màn hình học viên để cập nhật đầy đủ thông tin", "Info", MessageControl.Icon.Info);
                        RegisterService.RegisterServices.TempStudentDepositService.Delete(RegisterService.RegisterServices.TempStudentDepositService.GetByID(ID));
                        Reload();
                        try
                        {
                            var ExistItems = RegisterService.RegisterServices.TempStudentDepositService.GetList(" TempStudentDeposit.TempStudentID=" + TempST.ID) as IList<TempStudentDeposit>;
                            if (ExistItems == null || ExistItems.Count <= 0)
                            {
                                Master.ReloadData(0);
                            }
                        }
                        catch
                        {
                        }

                    }
                    else
                    {

                        MessageControl.ShowMessage(@"Có lỗi xảy ra, đăng ký học không thành công", "Error", MessageControl.Icon.Error);
                        splashScreenManager1.CloseWaitForm();
                    }
                }
                catch (Exception ex)
                {

                    MessageControl.ShowMessage(@"Có lỗi xảy ra, đăng ký học không thành công \n Chi tiết lỗi: " + ex.Message, "Error", MessageControl.Icon.Error);
                    splashScreenManager1.CloseWaitForm();
                }


            });
        }

        private void TempStudentDepositUC_Load(object sender, EventArgs e)
        {
            AddTextChanged(groupControl1.Controls);
        }

        private void cmddkhoc_Click(object sender, EventArgs e)
        {
            RegisterClass();
        }

        
    }
}
